//闯关游戏需要破解一组密码，闯关组给出的有关密码的线索是： 
//
// 
// 一个拥有密码所有元素的非负整数数组 password 
// 密码是 password 中所有元素拼接后得到的最小的一个数 
// 
//
// 请编写一个程序返回这个密码。 
//
// 
//
// 示例 1： 
//
// 
//输入：password = [15, 8, 7]
//输出："1578" 
//
// 示例 2： 
//
// 
//输入：password = [0, 3, 30, 34, 5, 9]
//输出："03033459" 
//
// 
//
// 提示： 
//
// 
// 0 < password.length <= 100 
// 
//
// 说明: 
//
// 
// 输出结果可能非常大，所以你需要返回一个字符串而不是整数 
// 拼接起来的数字可能会有前导 0，最后结果不需要去掉前导 0 
// 
//
// 
//
// Related Topics 贪心 字符串 排序 👍 698 👎 0


package LeetCode.editor.cn;


import java.util.Arrays;
import java.util.stream.Collectors;

/**
 * @author ldltd
 * @date 2025-05-15 16:38:39
 * @description LCR 164.破解闯关密码
 
 */
 
public class BaShuZuPaiChengZuiXiaoDeShuLcof {
    public static void main(String[] args) {
    //测试代码
    BaShuZuPaiChengZuiXiaoDeShuLcof fun = new BaShuZuPaiChengZuiXiaoDeShuLcof();
    Solution solution= fun.new Solution();
        System.out.println(solution.crackPassword(new int[]{15, 8, 7}));//"1578"
    }

//leetcode submit region begin(Prohibit modification and deletion)
class Solution {
    public String crackPassword1(int[] password) {
        return Arrays.stream(password)
                .mapToObj(String::valueOf)
                //The way to compare is to see which lexicographical order is smaller, a+b or b+a
                .sorted((a, b) -> (a + b).compareTo(b + a))
                .collect(Collectors.joining());
    }
    //不用stream流
    public String crackPassword2(int[] password) {
        // 将数字数组转为字符串数组
        String[] strs = new String[password.length];
        for (int i = 0; i < password.length; i++) {
            strs[i] = String.valueOf(password[i]);
        }

        // 自定义排序：比较 a+b 和 b+a 的字典序
        Arrays.sort(strs, (a, b) -> (a + b).compareTo(b + a));

        // 拼接字符串
        StringBuilder sb = new StringBuilder();
        for (String s : strs) {
            sb.append(s);
        }
        return sb.toString();
    }
    //使用string.join函数
    public String crackPassword(int[] password) {
        String[] strs = new String[password.length];
        for (int i = 0; i < password.length; i++) {
            strs[i] = String.valueOf(password[i]);
        }
        Arrays.sort(strs, (a, b) -> (a + b).compareTo(b + a));
        return String.join("", strs);  // 直接拼接
    }
}
//leetcode submit region end(Prohibit modification and deletion)

}
